from tkinter import*
import tkinter
from tkinter import messagebox
# import tkMessageBox

# root = Tk()  # 创建窗口对象的背景色
#                                 # 创建两个列表
# li = ['C','python','php','html','SQL','java']
# movie  = ['CSS','jQuery','Bootstrap']
# listb  = Listbox(root)          #  创建两个列表组件
# listb2 = Listbox(root)
#
# for item in li:                 # 第一个小部件插入数据
#     listb.insert(0,item)
#
# for item in movie:              # 第二个小部件插入数据
#     listb2.insert(0,item)
#
# listb.pack()                    # 将小部件放置到主窗口中
# listb2.pack()
# root.mainloop()                 # 进入消息循环

# top = tkinter.Tk()
# def helloCallBack():
#     messagebox.showinfo("Hello Python", "Hello Runoob")
# B = tkinter.Button(top, text="点我", command=helloCallBack)
# B.pack()
# top.mainloop()

# root = Tk()
# # 创建一个Canvas，设置其背景色为白色
# cv = Canvas(root,bg = 'black')
# # 创建一个矩形，坐标为(10,10,110,110)
# cv.create_rectangle(10,10,110,110)
# cv.pack()
# root.mainloop()
# # 为明显起见，将背景色设置为白色，用以区别 root

# 复选框
# CheckVar1 = IntVar()
# CheckVar2 = IntVar()
# C1 = Checkbutton(top, text = "RUNOOB", variable = CheckVar1, \
#                  onvalue = 1, offvalue = 0, height=5, \
#                  width = 20)
# C2 = Checkbutton(top, text = "GOOGLE", variable = CheckVar2, \
#                  onvalue = 1, offvalue = 0, height=5, \
#                  width = 20)
# C1.pack()
# C2.pack()
# top.mainloop()

print("https://blog.csdn.net/ahilll/article/details/81531587")
#
# 1)  创建主窗口及Label部件（标签）创建使用
# import tkinter as tk  # 使用Tkinter前需要先导入
# window = tk.Tk()
# window.title('My Window')
# window.geometry('500x300')  # 长宽 500x300
# l = tk.Label(window, text='Hello！this is Tkinter', bg='yellow', font=('Arial', 12), width=30, height=2)
# # 说明： bg为背景，font为字体，width为长，height为高，这里的长和高是字符的长和高，比如height=2,就是标签有2个字符这么高
#
# # 放置标签
# l.pack()  # Label内容content区域放置位置，自动调节尺寸
# # 放置lable的方法有：1）l.pack(); 2)l.place();
# window.mainloop()
# # 注意，loop因为是循环的意思，window.mainloop就会让window不断的刷新，如果没有mainloop,就是一个静态的window,传入进去的值就不会有循环，mainloop就相当于一个很大的while循环，有个while，每点击一次就会更新一次，所以我们必须要有循环
# # 所有的窗口文件都必须有类似的mainloop函数，mainloop是窗口文件的关键的关键。

# 2)Button窗口部件
import tkinter as tk
# # 第1步，实例化object，建立窗口window
window = tk.Tk()

# 第2步，给窗口的可视化起名字
window.title('My Window')

# 第3步，设定窗口的大小(长 * 宽)
window.geometry('500x300')  # 这里的乘是小x

# 第4步，在图形界面上设定标签
var = tk.StringVar()  # 将label标签的内容设置为字符类型，用var来接收hit_me函数的传出内容用以显示在标签上
l = tk.Label(window, textvariable=var, bg='green', fg='white', font=('Arial', 12), width=30, height=2)
# # 说明： bg为背景，fg为字体颜色，font为字体，width为长，height为高，这里的长和高是字符的长和高，比如height=2,就是标签有2个字符这么高
l.pack()
# # 定义一个函数功能（内容自己自由编写），供点击Button按键时调用，调用命令参数command=函数名
on_hit = False

def hit_me():
    global on_hit
    if on_hit == False:
        on_hit = True
        var.set('you hit me')
    else:
        on_hit = False
        var.set('')

# 第5步，在窗口界面设置放置Button按键
b = tk.Button(window, text='hit me', font=('Arial', 12), width=10, height=1, command=hit_me)
b.pack()
#
# # 第6步，主窗口循环显示
window.mainloop()

# 3) Entry 窗口部件
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# author:洪卫
#
# import tkinter as tk  # 使用Tkinter前需要先导入
#
# # 第1步，实例化object，建立窗口window
# window = tk.Tk()
#
# # 第2步，给窗口的可视化起名字
# window.title('My Window')
#
# # 第3步，设定窗口的大小(长 * 宽)
# window.geometry('500x300')  # 这里的乘是小x
#
# # 第4步，在图形界面上设定输入框控件entry并放置控件
# e1 = tk.Entry(window, show='*', font=('Arial', 14))  # 显示成密文形式
# e2 = tk.Entry(window, show=None, font=('Arial', 14))  # 显示成明文形式
# e1.pack()
# e2.pack()
#
# # 第5步，主窗口循环显示
# window.mainloop()

# 4）Text窗口部件
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# author:洪卫

# import tkinter as tk  # 使用Tkinter前需要先导入
#
# # 第1步，实例化object，建立窗口window
# window = tk.Tk()
#
# # 第2步，给窗口的可视化起名字
# window.title('My Window')
#
# # 第3步，设定窗口的大小(长 * 宽)
# window.geometry('500x300')  # 这里的乘是小x
#
# # 第4步，在图形界面上设定输入框控件entry框并放置
# e = tk.Entry(window, show=None)  # 显示成明文形式
# e.pack()
#
#
# # 第5步，定义两个触发事件时的函数insert_point和insert_end（注意：因为Python的执行顺序是从上往下，所以函数一定要放在按钮的上面）
# def insert_point():  # 在鼠标焦点处插入输入内容
#     var = e.get()
#     t.insert('insert', var)
#
#
# def insert_end():  # 在文本框内容最后接着插入输入内容
#     var = e.get()
#     t.insert('end', var)
#
#
# # 第6步，创建并放置两个按钮分别触发两种情况
# b1 = tk.Button(window, text='insert point', width=10,
#                height=2, command=insert_point)
# b1.pack()
# b2 = tk.Button(window, text='insert end', width=10,
#                height=2, command=insert_end)
# b2.pack()
#
# # 第7步，创建并放置一个多行文本框text用以显示，指定height=3为文本框是三个字符高度
# t = tk.Text(window, height=3)
# t.pack()
#
# # 第8步，主窗口循环显示
# window.mainloop()

# 5) Listbox 窗口部件
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# author:洪卫

# import tkinter as tk  # 使用Tkinter前需要先导入
#
# # 第1步，实例化object，建立窗口window
# window = tk.Tk()
#
# # 第2步，给窗口的可视化起名字
# window.title('My Window')
#
# # 第3步，设定窗口的大小(长 * 宽)
# window.geometry('500x300')  # 这里的乘是小x
#
# # 第4步，在图形界面上创建一个标签label用以显示并放置
# var1 = tk.StringVar()  # 创建变量，用var1用来接收鼠标点击具体选项的内容
# l = tk.Label(window, bg='green', fg='yellow', font=('Arial', 12), width=10, textvariable=var1)
# l.pack()
#
#
# # 第6步，创建一个方法用于按钮的点击事件
# def print_selection():
#     value = lb.get(lb.curselection())  # 获取当前选中的文本
#     var1.set(value)  # 为label设置值
#
#
# # 第5步，创建一个按钮并放置，点击按钮调用print_selection函数
# b1 = tk.Button(window, text='print selection', width=15, height=2, command=print_selection)
# b1.pack()
#
# # 第7步，创建Listbox并为其添加内容
# var2 = tk.StringVar()
# var2.set((1, 2, 3, 4))  # 为变量var2设置值
# # 创建Listbox
# lb = tk.Listbox(window, listvariable=var2)  # 将var2的值赋给Listbox
# # 创建一个list并将值循环添加到Listbox控件中
# list_items = [11, 22, 33, 44]
# for item in list_items:
#     lb.insert('end', item)  # 从最后一个位置开始加入值
# lb.insert(1, 'first')  # 在第一个位置加入'first'字符
# lb.insert(2, 'second')  # 在第二个位置加入'second'字符
# lb.delete(2)  # 删除第二个位置的字符
# lb.pack()
#
# # 第8步，主窗口循环显示
# window.mainloop()

# 6)Radiobutton窗口部件
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# author:洪卫

# import tkinter as tk  # 使用Tkinter前需要先导入
#
# # 第1步，实例化object，建立窗口window
# window = tk.Tk()
#
# # 第2步，给窗口的可视化起名字
# window.title('My Window')
#
# # 第3步，设定窗口的大小(长 * 宽)
# window.geometry('500x300')  # 这里的乘是小x
#
# # 第4步，在图形界面上创建一个标签label用以显示并放置
# var = tk.StringVar()  # 定义一个var用来将radiobutton的值和Label的值联系在一起.
# l = tk.Label(window, bg='yellow', width=20, text='empty')
# l.pack()
#
#
# # 第6步，定义选项触发函数功能
# def print_selection():
#     l.config(text='you have selected ' + var.get())
#
#
# # 第5步，创建三个radiobutton选项，其中variable=var, value='A'的意思就是，当我们鼠标选中了其中一个选项，把value的值A放到变量var中，然后赋值给variable
# r1 = tk.Radiobutton(window, text='Option A', variable=var, value='A', command=print_selection)
# r1.pack()
# r2 = tk.Radiobutton(window, text='Option B', variable=var, value='B', command=print_selection)
# r2.pack()
# r3 = tk.Radiobutton(window, text='Option C', variable=var, value='C', command=print_selection)
# r3.pack()
#
# # 第7步，主窗口循环显示
# window.mainloop()

# 7)Checkbutton窗口部件

# !/usr/bin/env python
# -*- coding: utf-8 -*-
# author:洪卫

# import tkinter as tk  # 使用Tkinter前需要先导入
#
# # 第1步，实例化object，建立窗口window
# window = tk.Tk()
#
# # 第2步，给窗口的可视化起名字
# window.title('My Window')
#
# # 第3步，设定窗口的大小(长 * 宽)
# window.geometry('500x300')  # 这里的乘是小x
#
# # 第4步，在图形界面上创建一个标签label用以显示并放置
# l = tk.Label(window, bg='yellow', width=20, text='empty')
# l.pack()
#
#
# # 第6步，定义触发函数功能
# def print_selection():
#     if (var1.get() == 1) & (var2.get() == 0):  # 如果选中第一个选项，未选中第二个选项
#         l.config(text='I love only Python ')
#     elif (var1.get() == 0) & (var2.get() == 1):  # 如果选中第二个选项，未选中第一个选项
#         l.config(text='I love only C++')
#     elif (var1.get() == 0) & (var2.get() == 0):  # 如果两个选项都未选中
#         l.config(text='I do not love either')
#     else:
#         l.config(text='I love both')  # 如果两个选项都选中
#
#
# # 第5步，定义两个Checkbutton选项并放置
# var1 = tk.IntVar()  # 定义var1和var2整型变量用来存放选择行为返回值
# var2 = tk.IntVar()
# c1 = tk.Checkbutton(window, text='Python', variable=var1, onvalue=1, offvalue=0, command=print_selection)  # 传值原理类似于radiobutton部件
# c1.pack()
# c2 = tk.Checkbutton(window, text='C++', variable=var2, onvalue=1, offvalue=0, command=print_selection)
# c2.pack()
#
# # 第7步，主窗口循环显示
# window.mainloop()

# 8) Scale窗口部件
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# author:洪卫

# import tkinter as tk  # 使用Tkinter前需要先导入
#
# # 第1步，实例化object，建立窗口window
# window = tk.Tk()
#
# # 第2步，给窗口的可视化起名字
# window.title('My Window')
#
# # 第3步，设定窗口的大小(长 * 宽)
# window.geometry('500x300')  # 这里的乘是小x
#
# # 第4步，在图形界面上创建一个标签label用以显示并放置
# l = tk.Label(window, bg='green', fg='white', width=20, text='empty')
# l.pack()
#
#
# # 第6步，定义一个触发函数功能
# def print_selection(v):
#     l.config(text='you have selected ' + v)
#
#
# # 第5步，创建一个尺度滑条，长度200字符，从0开始10结束，以2为刻度，精度为0.01，触发调用print_selection函数
# s = tk.Scale(window, label='try me', from_=0, to=10, orient=tk.HORIZONTAL, length=200, showvalue=0, tickinterval=2,
#              resolution=0.01, command=print_selection)
# s.pack()
#
# # 第7步，主窗口循环显示
# window.mainloop()

# 9） Cansvas 窗口部件
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# author:洪卫

# import tkinter as tk  # 使用Tkinter前需要先导入
#
# # 第1步，实例化object，建立窗口window
# window = tk.Tk()
#
# # 第2步，给窗口的可视化起名字
# window.title('My Window')
#
# # 第3步，设定窗口的大小(长 * 宽)
# window.geometry('500x300')  # 这里的乘是小x
#
# # 第4步，在图形界面上创建 500 * 200 大小的画布并放置各种元素
# canvas = tk.Canvas(window, bg='green', height=200, width=500)
# # 说明图片位置，并导入图片到画布上
# image_file = tk.PhotoImage(file='pic.gif')  # 图片位置（相对路径，与.py文件同一文件夹下，也可以用绝对路径，需要给定图片具体绝对路径）
# image = canvas.create_image(250, 0, anchor='n', image=image_file)  # 图片锚定点（n图片顶端的中间点位置）放在画布（250,0）坐标处
# # 定义多边形参数，然后在画布上画出指定图形
# x0, y0, x1, y1 = 100, 100, 150, 150
# line = canvas.create_line(x0 - 50, y0 - 50, x1 - 50, y1 - 50)  # 画直线
# oval = canvas.create_oval(x0 + 120, y0 + 50, x1 + 120, y1 + 50, fill='yellow')  # 画圆 用黄色填充
# arc = canvas.create_arc(x0, y0 + 50, x1, y1 + 50, start=0, extent=180)  # 画扇形 从0度打开收到180度结束
# rect = canvas.create_rectangle(330, 30, 330 + 20, 30 + 20)  # 画矩形正方形
# canvas.pack()
#
#
# # 第6步，触发函数，用来一定指定图形
# def moveit():
#     canvas.move(rect, 2, 2)  # 移动正方形rect（也可以改成其他图形名字用以移动一起图形、元素），按每次（x=2, y=2）步长进行移动
#
#
# # 第5步，定义一个按钮用来移动指定图形的在画布上的位置
# b = tk.Button(window, text='move item', command=moveit).pack()
#
# # 第7步，主窗口循环显示
# window.mainloop()

